﻿--- Eliminar las funciones existentes sin importar el numero ni tipo de parametros
SELECT * FROM "DropFunction_AWIL"('FuncSeguridadParametro');
--- crear una nueva funcion
CREATE FUNCTION "FuncSeguridadParametro"(
	 IN	"@OP" CHARACTER VARYING(64)
	,IN	"@paramAux" TEXT
	,INOUT	"@id" INTEGER
	,INOUT	"@fechaGrab" timestamp
	,INOUT	"@usuarioGrab" character varying(32)
	,INOUT	"@activo" boolean
	,INOUT	"@codParametro" character varying(32)
	,INOUT	"@codParametroTipo" character varying(32)
	,INOUT	"@nombreParametro" character varying(128)
	,INOUT	"@descripcion" character varying(256)
	,INOUT	"@orden" INTEGER
	,INOUT	"@valor" character varying(128)
	,INOUT	"@readOnly" BOOLEAN
	,INOUT	"@ocultar" BOOLEAN
	,INOUT	"@tipoDato" character varying(32)	
)RETURNS 
	SETOF RECORD
AS $$ 
DECLARE
	Auxiliar TEXT;
BEGIN

	/*SELECT BY CODIGO*/
	IF "@OP"='selectByCodigo' THEN
		RETURN	QUERY
		SELECT	"id","fechaGrab","usuarioGrab","activo","codParametro","codParametroTipo","nombreParametro","descripcion","orden","valor","readOnly","ocultar","tipoDato"
		FROM	"SeguridadParametro"
		WHERE	"codParametro"="codParametro";
	RETURN;
	END IF;

	/*SELECT TODOS*/
	IF "@OP"='selectAll' THEN
		RETURN	QUERY
		SELECT	"id","fechaGrab","usuarioGrab","activo","codParametro","codParametroTipo","nombreParametro","descripcion","orden","valor","readOnly","ocultar","tipoDato"
		FROM	"SeguridadParametro";
	RETURN;
	END IF;

	/*INSERTAR NUEVO REGISTRO*/
	IF "@OP"='insert' THEN

		--- Verifico que no exista  con ese CODIGO
		IF EXISTS (SELECT 1 FROM "SeguridadParametro" WHERE "codParametro"="@codParametro") THEN
			Auxiliar = 'Ya existe un parametro con el codigo "' || "@codParametro" || '", verifique.';
			RAISE EXCEPTION '%', Auxiliar;
		END IF;

		--- Verifico que no exista con ese NOMBRE
		IF EXISTS (SELECT 1 FROM "SeguridadParametro" WHERE "nombreParametro"="@nombreParametro") THEN
			Auxiliar = 'Ya existe un parametro con el Nombre "' || "@nombreParametro" || '", verifique.';
			RAISE EXCEPTION '%', Auxiliar;
		END IF;

		-- Grabo el registro
		INSERT INTO "SeguridadParametro" ("usuarioGrab","usuarioUltMod","activo","codParametro","codParametroTipo","nombreParametro","descripcion","orden","valor","readOnly","ocultar","tipoDato")
		VALUES	 ("@usuarioGrab","@usuarioGrab",coalesce("@activo",TRUE),"@codParametro","@codParametroTipo","@nombreParametro","@descripcion",coalesce("@orden",0),"@valor",coalesce("@readOnly",FALSE),coalesce("@ocultar",FALSE),"@tipoDato");
		
		RETURN	QUERY SELECT	"id","fechaGrab","usuarioGrab","activo","codParametro","codParametroTipo","nombreParametro","descripcion","orden","valor","readOnly","ocultar","tipoDato" FROM	"SeguridadParametro" ORDER BY "id" DESC LIMIT 1;
	RETURN;
	END IF;

	/*ACTUALIZAR REGISTRO*/
	IF "@OP"='update' THEN
		--- Verifico que no exista  con el nuevo CODIGO
		IF EXISTS (SELECT 1 FROM "SeguridadParametro" WHERE "codParametro"="@codParametro" AND "id"<>"@id") THEN
			Auxiliar = 'Ya existe Otro parametro con el codigo "' || "@codParametro" || '", verifique.';
			RAISE EXCEPTION '%', Auxiliar;
		END IF;

		--- Verifico que no exista  con ese NOMBRE
		IF EXISTS (SELECT 1 FROM "SeguridadParametro" WHERE "nombreParametro"="@nombreParametro" AND "id"<>"@id") THEN
			Auxiliar = 'Ya existe Otro parametro con el Nombre "' || "@nombreParametro" || '", verifique.';
			RAISE EXCEPTION '%', Auxiliar;
		END IF;

		--- Actualizo el registro
		UPDATE	
			"SeguridadParametro" 
		SET	
			 "activo"=coalesce("@activo","activo")
			,"fechaUltMod"=NOW() 
			,"usuarioUltMod"="@usuarioGrab" 
			,"codParametro"="@codParametro"
			,"codParametroTipo"="@codParametroTipo"
			,"nombreParametro"="@nombreParametro"			
			,"descripcion"="@descripcion"
			,"orden"="@orden"
			,"valor"="@valor"
			,"readOnly"="@readOnly"
			,"ocultar"="@ocultar"
			,"tipoDato"="@tipoDato"
		WHERE	
			"id"="@id";

	RETURN;
	END IF;

	/*ELIMINAR REGISTRO*/
	IF "@OP"='delete' THEN

		--- Borro el registro
		DELETE FROM "SeguridadParametro" 
		WHERE "id"="@id";

	RETURN;
	END IF;


--- Controlo que se haya digitado el OP correctamente
	IF "@OP" IS NOT NULL THEN
		Auxiliar = 'El OP "' || "@OP" || '" No existe, verifique.';
		RAISE EXCEPTION '%', Auxiliar;
	RETURN;
	END IF;
END;
$$ LANGUAGE 'plpgsql';

